package edu.hubu.store.dao;


import edu.hubu.store.domain.OrderItem;
import edu.hubu.store.domain.Product;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.ArrayListHandler;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.sql.SQLException;
import java.util.List;

@Repository
@Mapper
public interface ProductDao {
    /**
     * 添加商品
     *
     * @param p
     */
    public void addProduct(@Param("p") Product p);

    /**
     * 查找所有商品
     *
     * @return
     */
    public List<Product> listAll();

    /**
     * 获取数据总条数
     *
     * @param category 分类名, 传入null表示查询所有分类
     * @return
     * @throws SQLException
     */
    public int findAllCount(String category);

    /**
     * 获取当前页数据
     *
     * @param startIndex  当前页
     * @param currentCount 页量
     * @param category     分类,null表示所有
     * @return
     */
    public List<Product> findByPage(@Param("startIndex") int startIndex, @Param("currentCount") int currentCount,
                                    @Param("category") String category);

    /**
     * 根据id查找商品
     *
     * @param id
     * @return
     */
    public Product findProductById(String id);

    /**
     * 生成订单时，将商品数量减少
     *
     * @param orderItem
     */
    public void changeProductNum(@Param("orderItem") OrderItem orderItem);


    //    // 销售榜单
    //    public List<Object[]> salesList(@Param("year") String year,@Param("month") String month)
    //            throws SQLException {
    //        String sql = "SELECT products.name,SUM(orderitem.buynum) totalsalnum FROM orders,products,orderItem WHERE orders.id=orderItem.order_id AND products.id=orderItem.product_id AND orders.paystate=1 and year(ordertime)=? and month(ordertime)=? GROUP BY products.name ORDER BY totalsalnum DESC";
    //        QueryRunner runner = new QueryRunner(DataSourceUtils.getDataSource());
    //        return runner.query(sql, new ArrayListHandler(), year, month);
    //    }

    /**
     * 多条件查询
     *
     * @param id
     * @param name
     * @param category
     * @param minprice
     * @param maxprice
     * @return
     */
    public List<Product> findProductByManyCondition(@Param("id") String id, @Param("name") String name, @Param("category") String category, @Param("minprice") String minprice, @Param("maxprice") String maxprice);

    /**
     * 修改商品信息
     *
     * @param p
     */
    public void editProduct(@Param("p") Product p);

    /**
     * 删除订单时，修改商品数量
     *
     * @param item
     */
    public void updateProductNum(@Param("item") OrderItem item);

    //前台，获取本周热销商品
    List<Object[]> getWeekHotProduct() throws SQLException;

    /**
     * 前台，用于搜索框根据书名来模糊查询相应的图书
     *
     * @param currentPage
     * @param currentCount
     * @param searchfield
     * @return
     */
    public List<Product> findBookByName(int currentPage, int currentCount, String searchfield);

    /**
     * 前台搜索框，根据书名模糊查询出的图书总数量
     *
     * @param searchfield
     * @return
     */
    public int findBookByNameAllCount(String searchfield);

    /**
     * 后台系统，根据id删除商品信息
     *
     * @param id
     */
    public void deleteProduct(String id);
}
